<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var name = '小王',age=17;
    var obj = {
        name:'小张',
        objAge:this.age,
        myFun:function (fm,t) {
            console.log(this.name + '年龄'+this.age,'来自'+fm+'去往'+t)
        }
    };
    var db = {
        name:'德玛',
        age:99
    };
    // call()、apply()、bind() 都是用来重定义this这个对象修改this指向的。
    // call 、bind 、 apply 这三个函数的第一个参数都是this的指向对象
    // 不同点：
    //call的第二个参数是直接放进去的，第二第三第 n 个参数全都用逗号分隔，直接放到后面
    obj.myFun.call(db,'成都','上海');
    //apply的第二个参数到第n个参数所有参数都必须放在一个数组里面传进去。
    obj.myFun.apply(db,['成都','上海']);
    //bind调用后返回的是一个绑定了this指向的新函数，bind返回的新函数不能再进行绑定，因为返回的是函数，所以要使用()调用才会执行。
    // 除了返回是函数以外，它的参数和call一样。
    obj.myFun.bind(db,'成都','上海')();
    //如果使用数组做参数，只会读取第一个元素做为第二个参数。
    obj.myFun.bind(db,['成都','上海'],'重庆')();
</script>
</body>
</html>